iT邦幫忙

2025 iThome 鐵人賽

DAY 26
0
IT 管理

Playwright + Test Design + AI Agent:自動化測試實戰系列 第 26

第 26 天:雷霆萬鈞 - 平行化測試,加速測試執行效率

  • 分享至 

  • xImage
  •  

在武學中,當高手將內力修煉至極,便能發出「雷霆萬鈞」的一擊,速度之快,力量之猛,讓對手措手不及。在自動化測試的世界裡,隨著測試案例數量的增加,執行時間也會不斷拉長。今天,我們將學習如何運用平行化測試(Parallel Testing),讓測試套件能夠多線並行,像雷霆般瞬間完成所有驗證,大幅提升測試效率。

內功心法:為什麼要平行化測試?

想像一下,你有 1000 個測試案例,每個執行需要 1 秒,總共需要 1000 秒(約 17 分鐘)。這對於開發流程來說,是一個巨大的瓶頸。特別是在 CI/CD 環境中,太長的測試時間會延遲程式碼部署,並且降低團隊的迭代速度。同時執行多個測試案例,它不是依序一個一個跑,而是將測試套件拆分給多個「執行緒」或「工作者(worker)」同時運行。這樣一來,原本需要 1000 秒的測試,如果用 10 個工作者同時執行,理論上只需要 100 秒就能完成。可想而知,平行化測試能夠大幅縮短執行時間,並且能夠讓開發者更快得到回饋,這也意味著我們在更短的時間能夠跑完成測試並且完成佈署。

招式演練:如何讓測試「多線並行」

Playwright 內建了強大的平行化功能,讓你可以輕鬆實踐這套心法,無需複雜的設定。

啟動平行模式

在 Playwright 中,你只需要在執行指令時加上 --workers 參數,就可以指定同時運行的工作者數量。

# 同時執行 4 個測試
npx playwright test --workers=4

# 讓 Playwright 根據硬體需求決定可以執行的 worker 數量
npx playwright test

當你執行第一個指令的時候,Playwright 會自動將你的測試套件拆分給 4 個獨立的瀏覽器實例,並且同時執行測試案例。

使用 Test Sharding(測試切分)

當測試套件大到無法在單一機器上執行,或需要跨多台機器平行執行時,測試切分(Test Sharding)就派上用場了。它能將你的測試套件精確地切分成多個部分,分配給不同的 CI/CD 機器或節點(Node)。

指令範例:

# 在 3 個節點中,執行第 1 個節點的測試
npx playwright test --shard=1/3

# 在 3 個節點中,執行第 2 個節點的測試
npx playwright test --shard=2/3

這個指令能確保每個節點只執行整個測試套件的一部分,從而實現跨機器的平行化。

善用 Tag 選擇測試

在大型專案中,你可能只想對特定的功能進行測試。Playwright 的 Tag 功能可以讓你精準地選擇要執行的測試。

招式範例

// tests/login.spec.ts
// 使用 @fast 標籤來標記快速測試
test('should login with valid credentials @fast', async ({ page }) => {
  // ...
});

// tests/payment.spec.ts
// 使用 @full-regression 標籤來標記回歸測試
test('should process a successful payment @full-regression', async ({ page }) => {
  // ...
});

執行指令

# 執行所有帶有 @fast 標籤的測試
npx playwright test --grep "@fast"

# 排除所有帶有 @fast 標籤的測試
npx playwright test --grep-invert "@fast"

你可以將 grepworkers 結合,來同時執行多個特定標籤的測試,例如 npx playwright test --grep "@full-regression" --workers=8

心法進階:讓平行測試穩定運行的五個關鍵

平行化測試雖然強大,但並非沒有代價。如果處理不當,可能會導致測試不穩定,特別是測試案例必須要能夠獨立執行並且不能依賴於其他測試案例。

  1. 測試案例獨立:每個測試案例都必須是獨立且可重現的。一個測試的成功或失敗,不應該依賴於另一個測試的執行狀態。這在撰寫測試時就要遵守,這個是平行化測試的基礎。
  2. 隔離測試資料:確保每個測試案例使用自己的測試資料。避免多個測試案例共用或修改相同的資料,這會造成競爭條件(Race Condition)和不可預期的結果。
  3. 避免外部依賴:如第 25 天所學,善用 Mock Server 或 Test Doubles 來隔離外部服務。這能確保測試結果只取決於你的程式碼,而不是外部服務的穩定性。
  4. 適度調整工作者數量:雖然 worker 越多,測試時間會越短,但每個 worker 都需要記憶體和 CPU。過多的 worker 可能會耗盡系統資源,導致測試速度反而變慢或失敗。通常是 CPU 核心的兩倍,但最佳數量取決於你的硬體配置和機器當時的資源。
  5. 使用穩定的定位器:確保你的測試程式碼使用穩定可靠的 selector(例如:data-testidgetByRole),避免因為 UI 變動而導致的不穩定性。

秘笈加持:結合 CI 平行化

在 CI/CD 流程中,你可以將平行化測試與自動化測試結合,讓每次程式碼提交都能執行測試案例。

GitHub Actions 範例

name: Playwright Tests

on:
  push:
    branches:
      - main

jobs:
  run-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 18.x
      - name: Install dependencies
        run: npm ci
      - name: Install Playwright browsers
        run: npx playwright install --with-deps
      - name: Run Playwright tests
        run: npx playwright test --workers=4

這段 YAML 程式碼能確保每次程式碼被推送到 main 分支時,都會自動執行 Playwright 測試,並使用 4 個工作者平行化運行,大幅提升了 CI/CD 的效率。

收功:今日總結

今天,我們學習了平行化測試,並透過它同時執行多個測試案例,縮短了測試套件的執行時間,是提升測試效率的關鍵。我們知道 Playwright 內建了強大的平行化功能,可以透過 --workers 參數使用。但更重要的是,我們必須確保測試獨立性、隔離測試資料、以及避免外部依賴等,這些是讓平行化測試穩定運行的基礎。掌握了如何大量平行執行測試案例,當有大量測試套件需要執行的時候,這個將不再是開發產品的痛點,而是能夠為團隊提供快速、可靠回饋的機制。


上一篇
第 25 天:以靜制動 — 使用 Mock Server 隔離外部依賴環境
下一篇
第 27 天:Flaky Test 診斷與修復,從不穩定到堅若磐石
系列文
Playwright + Test Design + AI Agent:自動化測試實戰27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言